a = (1,2,3,4) # 这是元组

# list() 将 元组， 生成器，字符串，range 对象 转换成列表
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']

# 列表推导式数组 -- 中括号和小括号的区别。
list_think = [x for x in range(10) if x % 2 == 0]
print(list_think) # [0, 2, 4, 6, 8]

# 普通列表 空间占用跟推导式一样，但是他的生成效率没有推导式快
normal = []
for i in range(10):
    if i % 2 == 0:
        normal.append(i)

# 生成器只有两种形式
#1 括号里面是一个表达式
gen_01 = list(x for x in range(10) if x % 2 == 0) # [0, 2, 4, 6, 8]

#2 生成器函数，可以
def gen_number():
    a = 0
    while a < 10:
        yield a
        a += 1

gen_02 = list(gen_number())
print(list(gen_02)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# list 转换元组 为 数组
print(list(a)) # [1, 2, 3, 4]
print(list(a)) # [1, 2, 3, 4]
# 元组可以访问切片，这个切片还是元组本身，无法修改
print(a[1:3][0]) # 2

# 元组转换成的列表一样 可以修改元素
c = list(a)
c[0] = 5
print(c) # [5, 2, 3, 4]
print(a) # [1, 2, 3, 4]